home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 34.zip / BS1 part 34 / GFA basic training.adf / Copper / DUALCOPPER.LST < prev    next >
File List  |  1989-06-01  |  6KB  |  266 lines

  1. ' Verwaltung von zwei Copperlisten
  2. '
  3. @copper_init
  4. '
  5. REPEAT
  6.   PRINT "Bunt nicht?",
  7.   PAUSE 40
  8.   EXIT IF MOUSEK
  9.   @user_copper1_an
  10.   EXIT IF MOUSEK
  11.   PRINT "Bunt nicht?",
  12.   PAUSE 40
  13.   @user_copper2_an
  14. UNTIL MOUSEK
  15. '
  16. @user_copper_aus
  17. EDIT
  18. '
  19. > PROCEDURE copper_init
  20.   OPTION BASE 0
  21.   DIM mem&(1),u_copadr%(1),neu_copadr%(1)
  22.   DIM startcop%(1)
  23.   @usercop1_lÄnge
  24.   @usercop2_lÄnge
  25.   @memory_copperbereit
  26. RETURN
  27. > PROCEDURE datas
  28.   copperlist1:          ! Das erste Label für die RESTORE-Anweisung
  29.   DATA $0180,$0000
  30.   DATA $7701,$fffe
  31.   DATA $0180,$0f00
  32.   DATA $7801,$fffe
  33.   DATA $0180,$0f10
  34.   DATA $7901,$fffe
  35.   DATA $0180,$0f20
  36.   DATA $7a01,$fffe
  37.   DATA $0180,$0f40
  38.   DATA $7b01,$fffe
  39.   DATA $0180,$0f60
  40.   DATA $7c01,$fffe
  41.   DATA $0180,$0f70
  42.   DATA $7d01,$fffe
  43.   DATA $0180,$0f80
  44.   DATA $7e01,$fffe
  45.   DATA $0180,$0f90
  46.   DATA $7f01,$fffe
  47.   DATA $0180,$0fa0
  48.   DATA $8001,$fffe
  49.   DATA $0180,$0fb0
  50.   DATA $8101,$fffe
  51.   DATA $0180,$0fc0
  52.   DATA $8201,$fffe
  53.   DATA $0180,$0fd0
  54.   DATA $8301,$fffe
  55.   DATA $0180,$0fe0
  56.   DATA $8401,$fffe
  57.   DATA $0180,$0ff0
  58.   DATA $8501,$fffe
  59.   DATA $0180,$0ff1
  60.   DATA $8601,$fffe
  61.   DATA $0180,$0ff2
  62.   DATA $8701,$fffe
  63.   DATA $0180,$0ff3
  64.   DATA $8801,$fffe
  65.   DATA $0180,$0ff4
  66.   DATA $8901,$fffe
  67.   DATA $0180,$0ff5
  68.   DATA $8a01,$fffe
  69.   DATA $0180,$0ef5
  70.   DATA $8b01,$fffe
  71.   DATA $0180,$0df5
  72.   DATA $8c01,$fffe
  73.   DATA $0180,$0cf5
  74.   DATA $8d01,$fffe
  75.   DATA $0180,$0bf4
  76.   DATA $8e01,$fffe
  77.   DATA $0180,$0af3
  78.   DATA $8f01,$fffe
  79.   DATA $0180,$09f2
  80.   DATA $9001,$fffe
  81.   DATA $0180,$08f1
  82.   DATA $9101,$fffe
  83.   DATA $0180,$07f2
  84.   DATA $9201,$fffe
  85.   DATA $0180,$06e3
  86.   DATA $9301,$fffe
  87.   DATA $0180,$06d3
  88.   DATA $9401,$fffe
  89.   DATA $0180,$06c3
  90.   DATA $9501,$fffe
  91.   DATA $0180,$06b3
  92.   DATA $9601,$fffe
  93.   DATA $0180,$06a3
  94.   DATA $9801,$fffe
  95.   DATA $0180,$0693
  96.   DATA $9901,$fffe
  97.   DATA $0180,$0683
  98.   DATA $9a01,$fffe
  99.   DATA $0180,$0673
  100.   DATA $9b01,$fffe
  101.   DATA $0180,$0664
  102.   DATA $9c01,$fffe
  103.   DATA $0180,$0655
  104.   DATA $9d01,$fffe
  105.   DATA $0180,$0555
  106.   DATA $9e01,$fffe
  107.   DATA $0180,$0546
  108.   DATA $9f01,$fffe
  109.   DATA $0180,$0
  110.   DATA $ffff
  111. RETURN
  112. > PROCEDURE datas2
  113.   copperlist2:          ! Das zweite Label für die RESTORE-Anweisung
  114.   DATA $0180,$0000
  115.   DATA $d701,$fffe
  116.   DATA $0180,$0f00
  117.   DATA $d801,$fffe
  118.   DATA $0180,$0f10
  119.   DATA $d901,$fffe
  120.   DATA $0180,$0f20
  121.   DATA $da01,$fffe
  122.   DATA $0180,$0f40
  123.   DATA $db01,$fffe
  124.   DATA $0180,$0f60
  125.   DATA $dc01,$fffe
  126.   DATA $0180,$0f70
  127.   DATA $dd01,$fffe
  128.   DATA $0180,$0f80
  129.   DATA $de01,$fffe
  130.   DATA $0180,$0f90
  131.   DATA $df01,$fffe
  132.   DATA $0180,$0fa0
  133.   DATA $e001,$fffe
  134.   DATA $0180,$0fb0
  135.   DATA $e101,$fffe
  136.   DATA $0180,$0fc0
  137.   DATA $e201,$fffe
  138.   DATA $0180,$0fd0
  139.   DATA $e301,$fffe
  140.   DATA $0180,$0fe0
  141.   DATA $e401,$fffe
  142.   DATA $0180,$0ff0
  143.   DATA $e501,$fffe
  144.   DATA $0180,$0ff1
  145.   DATA $e601,$fffe
  146.   DATA $0180,$0ff2
  147.   DATA $e701,$fffe
  148.   DATA $0180,$0ff3
  149.   DATA $e801,$fffe
  150.   DATA $0180,$0ff4
  151.   DATA $e901,$fffe
  152.   DATA $0180,$0ff5
  153.   DATA $ea01,$fffe
  154.   DATA $0180,$0ef5
  155.   DATA $eb01,$fffe
  156.   DATA $0180,$0df5
  157.   DATA $ec01,$fffe
  158.   DATA $0180,$0cf5
  159.   DATA $ed01,$fffe
  160.   DATA $0180,$0bf4
  161.   DATA $ee01,$fffe
  162.   DATA $0180,$0af3
  163.   DATA $ef01,$fffe
  164.   DATA $0180,$09f2
  165.   DATA $f001,$fffe
  166.   DATA $0180,$08f1
  167.   DATA $f101,$fffe
  168.   DATA $0180,$07f2
  169.   DATA $f201,$fffe
  170.   DATA $0180,$06e3
  171.   DATA $f301,$fffe
  172.   DATA $0180,$06d3
  173.   DATA $f401,$fffe
  174.   DATA $0180,$06c3
  175.   DATA $f501,$fffe
  176.   DATA $0180,$06b3
  177.   DATA $f601,$fffe
  178.   DATA $0180,$06a3
  179.   DATA $f801,$fffe
  180.   DATA $0180,$0693
  181.   DATA $f901,$fffe
  182.   DATA $0180,$0683
  183.   DATA $fa01,$fffe
  184.   DATA $0180,$0673
  185.   DATA $fb01,$fffe
  186.   DATA $0180,$0664
  187.   DATA $fc01,$fffe
  188.   DATA $0180,$0655
  189.   DATA $fd01,$fffe
  190.   DATA $0180,$0555
  191.   DATA $fe01,$fffe
  192.   DATA $0180,$0546
  193.   DATA $ff01,$fffe
  194.   DATA $0180,$0
  195.   DATA $ffff
  196. RETURN
  197. > PROCEDURE usercop1_lÄnge
  198.   RESTORE copperlist1
  199.   DO
  200.     READ x%
  201.     EXIT IF x%=&HFFFF
  202.     INC anz1&    ! Anzahl Worte
  203.   LOOP
  204.   MUL anz1&,2    ! Anzahl Bytes
  205. RETURN
  206. > PROCEDURE usercop2_lÄnge
  207.   RESTORE copperlist2
  208.   DO
  209.     READ x%
  210.     EXIT IF x%=&HFFFF
  211.     INC anz2&    ! Anzahl Worte
  212.   LOOP
  213.   MUL anz2&,2    ! Anzahl Bytes
  214. RETURN
  215. > PROCEDURE memory_copperbereit
  216.   mem&(0)=76+anz1&               ! 76 Bytes werden noch vom System übernommen
  217.   mem&(1)=76+anz2&               ! 76 Bytes werden noch vom System übernommen
  218.   altcop%=LPEEK(_GfxBase+50)     ! Copper-Automatik-Vector relativ zu GFXBASE retten
  219.   startcop%(0)=altcop%+84        ! Anfang der Daten die übernommen werden müssen
  220.   startcop%(1)=altcop%+84        ! Anfang der Daten die übernommen werden müssen
  221.   FOR i|=0 TO 1
  222.     u_copadr%(i|)=MALLOC(mem&(i|),2)! Chipmemory belegen in errechneter Größe
  223.     neu_copadr%(i|)=u_copadr%(i|)   ! Zweimal speichern (Zaehler und Übergabe)
  224.     '
  225.     '        Startliste des Systems Kopieren
  226.     BMOVE startcop%(i|),neu_copadr%(i|),60
  227.     ADD neu_copadr%(i|),60          ! 60 sind schon drin, darum um 60 erhöhen
  228.     '        Unsere Liste
  229.     IF i|=0
  230.       RESTORE copperlist1
  231.     ELSE IF i|=1
  232.       RESTORE copperlist2
  233.     ENDIF
  234.     CLR zeiger&,x%
  235.     ' Daten schreiben
  236.     DO
  237.       READ x%
  238.       EXIT IF x%=&HFFFF
  239.       DPOKE neu_copadr%(i|)+zeiger&,x%
  240.       ADD zeiger&,2
  241.     LOOP
  242.     '        End Liste des Systems kopieren
  243.     ADD startcop%(i|),60
  244.     IF i|=0
  245.       ADD neu_copadr%(i|),anz1&
  246.     ELSE IF i|=1
  247.       ADD neu_copadr%(i|),anz2&
  248.     ENDIF
  249.     BMOVE startcop%(i|),neu_copadr%(i|),16
  250.   NEXT i|
  251. RETURN
  252. > PROCEDURE user_copper1_an
  253.   VSYNC                         ! Warten auf Vblank, damit Copper nicht ausliest
  254.   LONG{_GfxBase+50}=u_copadr%(0)! (Unsere) Adresse in den Auto-Vector schreiben
  255. RETURN
  256. > PROCEDURE user_copper2_an
  257.   VSYNC                         ! Warten auf Vblank, damit Copper nicht ausliest
  258.   LONG{_GfxBase+50}=u_copadr%(1)! (Unsere) Adresse in den Auto-Vector schreiben
  259. RETURN
  260. > PROCEDURE user_copper_aus
  261.   VSYNC                        ! Warten, damit Copper nicht stört
  262.   LONG{_GfxBase+50}=altcop%    ! Vector zurückschreiben (System-Datenliste)
  263.   ~MFREE(u_copadr%(0),mem1&)   ! 1.User-Coplistspeicher Frei!
  264.   ~MFREE(u_copadr%(1),mem2&)   ! 2.User-Coplistspeicher Frei!
  265. RETURN
  266.